<?php


namespace App\Services\Agora;


class UserPermissionsService extends BaseService
{
//    在服务端创建封禁用户权限规则。
//    可封禁的用户权限（privileges）包括：
//
//    join_channel: 加入频道。
//    publish_audio: 发送音频流。
//    publish_video: 发送视频流。
//    封禁用户权限的规则通过 cname、uid 和 ip 三个字段实现过滤，规则如下：
//
//    当 privileges 设为 join_channel 时:
//
//    如果填写 ip，不填写 cname 和 uid，则所有使用该 ip 的用户都无法登录 app 中的任何频道。
//    注意事项：使用 ip 作为过滤字段，可能会错误地封禁不该被封禁的用户，例如，多人共享一个 IP 地址。
//    如果填写 cname，不填写 uid 和 ip，则任何人都无法登录 app 中该 cname 对应的频道。
//    注意事项：使用 cname 作为过滤字段，相当于封禁该 cname 对应的频道。
//    如果填写 uid，不填写 cname 和 ip，则该 uid无法登录 app 中的任何频道。
//    如果填写 cname 和 uid，不填写 ip，则该 uid 无法登录 app 中该 cname 对应的频道。
//    当 privileges 设为 publish_audio 或 publish_video 时，过滤规则如下：
//
//    如果填写 ip，不填写 cname 和 uid，则所有使用该 ip 的用户都无法在 app 中的任何频道内发送音频或视频流。
//    如果填写 cname，不填写 uid 和 ip，则任何人都无法在该 cname 对应的频道内发送音频或视频流。
//    如果填写 uid，不填写 cname 和 ip，则该 uid无法在 app 中的任何频道内发送音频或视频流。
//    如果填写 cname 和 uid，不填写 ip，则该 uid 无法在该 cname 对应的频道发送音频或视频流。
//    用户被踢出频道后，会收到网络连接已被服务器禁止回调：
//
//    Android: onConnectionStateChanged 回调报告 CONNECTION_CHANGED_BANNED_BY_SERVER(3)。
//    iOS/macOS: connectionChangedToState 回调报告 AgoraConnectionChangedBannedByServer(3)。
//    Web: Client.on("client-banned")。
//    Windows: onConnectionStateChanged 回调报告 CONNECTION_CHANGED_BANNED_BY_SERVER(3)。
//    Electron: AgoraRtcEngine.on("connectionStateChanged") 回调报告 3。
//    Unity: OnConnectionStateChangedHandler 回调报告 CONNECTION_CHANGED_BANNED_BY_SERVER(3)

    /**
     * 在服务端创建封禁用户权限规则
     * @param $type join_channel 加入频道。
     * publish_audio: 发送音频流。publish_video: 发送视频流。
     * @param null $cname 频道名称
     * @param null $ip 通讯使用的 IP
     * @param null $uid 用户 ID
     * @param null $time 封禁时间，秒
     * @return bool|mixed|string
     */
    public function create($type, $cname = null, $ip = null, $uid = null, $time = 30)
    {
        $res = $this->request('/dev/v1/kicking-rule', [
            'appid' => $this->appid,
            'cname' => $cname,
            'ip' => $ip,
            'uid' => $uid,
            'time' => $time,
            'privileges' => [
                $type
            ]
        ], 'POST');
        return $res;
    }

    /**
     * 更新指定的封禁用户权限规则的生效时间
     * @param $id 禁用规则ID
     * @param $time 时间，秒
     * @return bool|mixed|string
     */
    public function update($id, $time)
    {
        $res = $this->request('/dev/v1/kicking-rule', [
            'appid' => $this->appid,
            'id' => $id,
            'time' => $time
        ], 'PUT');
        return $res;
    }

    /**
     * 获取服务端的封禁用户权限规则列表
     * @return bool|mixed|string
     */
    public function read()
    {
        $res = $this->request('/dev/v1/kicking-rule', [
            'appid' => $this->appid
        ], 'GET');
        return $res;
    }

    /**
     * 删除指定的封禁用户权限规则
     * @param $id 规则ID
     * @return bool|mixed|string
     */
    public function delete($id)
    {
        $res = $this->request('/dev/v1/kicking-rule', [
            'appid' => $this->appid,
            'id' => $id
        ], 'DELETE');
        return $res;
    }
}
